查看原文
其他

教程 | 用 Substrate 做一个简单的 Roguelike 游戏

Edward A Thomson PolkaWorld 2019-12-11

加入 www.polkaworld.org 社区,共建 Web 3.0!

太长不读版:一个建立在Parity Substrate上的简单的Roguelike游戏。我会在这里简述编写这个游戏所需的一切。


在之前的博客中,我提出了关于一个比简单纸牌游戏更具娱乐性的简单区块链的想法。从那时起,我进行了更多研究,并对怎样让这个想法变得可行有了更好的主意。


在这篇文章里,我将概述攻击计划,并提供你所需的所有资源的链接。最终结果将是一个游戏,该游戏将以程序方式生成基本地图,并生成将使用剑、弓或魔术战斗的怪物。我刚刚提到药水了吗?



我并不是真正的程序员,所以这个想法将花费我一些时间。相反,我分享这个idea,希望它鼓励有能力的程序员接受挑战(也将是一个很棒的hackathon项目!)。一个好的程序员可能会在一周内完成一些工作。


游戏概要

  • 连接到Substrate链的Roguelike游戏。

  • 使用链上随机性来生成地图和项目。

  • 机制简单,但是对于一个有趣的挑战来说足够复杂了。(这种类型具有持久力,现在已经快40岁了!)

  • 一条链上多个游戏。

这就是游戏的风格。你如何建造呢?好吧,我想我可以提供完成该项目所需的所有资源。


建立的步骤:

以下是为了构建这个游戏,你需要学习的详细步骤。

  1. 知道什么是Rogue。

  2. 完成一个Rogue教程。

  3. 遵循Shawn的Substrate Kitties教程。

  4. 将简单的Rogue游戏与Shawn的Kitties游戏集成。


Rogue. 一款1980年的经典游戏(资料来源:维基百科)



Rogue

Rogue是1980年的经典RPG游戏,自诞生以来就启发了无数模仿者。它可能是你能找到的最简单的一种RPG游戏,不过事实证明它非常受欢迎。


Rogue现在也用来指代RPG游戏的一个子类型,一般涉及“永久死亡”和“随机关卡”等内容。通常,它们是回合制的、基于网格的和专注于单角色的游戏。将游戏原型放置在幻想世界中时,可以将游戏风格应用于更多设置。对于什么叫Roguelike游戏有一个社区定义,这里不深入介绍了,但是我可以提供一个链接。


正如我在之前的博客中指出的那样,甚至有业余爱好者正在以家庭作坊形式开发新的Roguelike游戏,更棒的是还有大量教程来学习如何创建这类游戏。这就是使该类游戏成为有吸引力的开发目标的原因,我将在下一部分中进行介绍。它们很容易编码,但提供了足够的复杂性来吸引人。



Roguelike 教程

现在,RoguelikeDev社区每年都要进行7天的挑战赛


有一个经典教程,其他很多教程都是基于它的。这也是我遵循的教程,它带你完成Python 2.7的完整实现。也就是说,Roguelike开发者社区的成员已经用其他语言(例如JS、Rust、C ++或最新版本的Python)重新创建了该教程。


值得一提的是,我建议把游戏连接到Parity的Substrate上。合适的编程语言选择是找一种已经可以和Substrate“对话”的语言。Rust是一个明显的选择,它可能和游戏、和Substrate会联系得更紧密,但并不是绝对必要的。我认为最简单的选择可能是使用JS语言。正如我们在Shawn的Substrate Kitties工作坊中所展示的那样,已经有一个由Parity维护的JS RPC的 API客户端,可以轻松地与Substrate节点进行交互。JS语言的优点在于它可以在浏览器中运行,并且不需要编译。


最受欢迎的Roguelike游戏之一:神秘古域(也叫 ADOM)(资料来源:Steam)


如果选择JS语言,你可能会复用以下教程中已完成的工作:此处。否则,请在Roguelik dev subreddit上查看各种完整的JS版本。你还会注意到Rust版本也有一些不错的教程:Rust Roguelike教程。



Shawn的Substrate Kitties工作坊


Parity团队的Shawn为了解Substrate撰写了精彩的教程。在他的线上工作坊中,你将学习如何构建一个简单的DappChain来玩类似加密猫(Crypto Kitties)的游戏。当前端加载到浏览器中时,所有游戏逻辑都位于链上。


参阅:Substrate收藏游戏工作坊。


我对本教程中的哪些成分感兴趣?

  • 链上随机性,可用于生成类似Rogue的地图。

  • 将加密密钥映射到游戏角色(人物)。

  • 交易人物和物品。

  • API请求。


链上随机

你第一次需要考虑与节点的交互是获取链上生成的随机值。然后可以将此值用作生成级别图的种子(请记住要通过程序生成此图)。在工作坊中,该值用于为猫提供唯一的ID,并提供一些随机DNA(会影响繁殖)。你可以从Substrate的系统模块中获取随机性:


<system::Module<T>>::random_seed()


更多详细信息,请参见以下页面:生成随机数据。


你可以通过以下方式构建游戏:与链的唯一交互是随机性的来源。这将是游戏与游戏链之间非常弱的耦合,但至少是测试的起点。这个值是公开的,如果我们以确定性的方式将其与公钥混合使用,那么任何人都可以重建每个玩家程序生成的地图。这应该使你能够检查其他玩家是否正确生成了地图。


将密钥链接到游戏角色

在这个工作坊里,你可以看到如何做到多个角色和不同密钥关联,甚至是多个角色与一个密钥相关联(例如一个玩家有多个游戏角色)。相关部分在这里:拥有多只小猫。

管理多个小猫!


如果你有多个人都可以读写同一链,那么你可以构思出一个共享世界的想法。任何人都可以重新生成另一位玩家的地图,从理论上讲,我们可以允许玩家尝试“属于”另一位玩家的关卡。在最小耦合场景中,你只能以确定性方式从随机值中生成一个世界,但是你永远不会将任何东西推回链上,因此,你永远不需要在链上存储任何东西。


有一个问题,你希望游戏动作多大程度地影响链上状态?你是否希望所有动作都经过严格验证并记录在链上,以便只有玩家本人才能从一个和他们的帐户关联的地牢关卡领取宝藏?


更高级的迭代是要有一个共享的世界,这样玩家可以互动。我绝对认为这一点对于像这样的简单游戏是可能的,并且基本上是我在上一个博客中所要求的。我敢说,我一笔带过了一些重要的细节,现实中其实更困难!


交易人物和物品

本教程中很赞的事情之一是交易小猫的能力。这证明了一款Roguelike游戏如何允许角色甚至物品的交易。

查看有关购买小猫的部分。



SubRogue

在最后一部分中,我将建议如何将它们组合在一起。首先,我建议你应该了解什么是Roguelike的游戏,然后我建议从许多在线教程中找一个来尝试。第三,我建议尝试Shawn的工作坊,以熟悉Substrate,从而弄清楚他的工作坊中哪些内容可以在我提出的想法中复用。


将所有想法融合在一起,应该可以制作出有趣的游戏。在Rogulike教程中,你可以添加以下功能:


程序性地生成地图,生成怪物并使用剑、弓或魔法与它们战斗。再加上使用药水的加持!


在“小猫”工作坊中,你将学习如何添加以下功能:


创建多个玩家(链接到一个公钥),他们都可以生成多个不同的地图,并能拥有和交易多个角色和物品。


开发人员还可以自由地用不同方法来为其游戏换皮肤,比如墙壁可以使用不同的图块集,或者一种游戏风格的剑可能是另一种风格的斧头(数据保持不变)。这些图形不必是原始的80年代ASCII艺术,但可以看起来像上面所示的ADOM或其他替代图块集一样清晰:


示例:具有相同机制的替代皮肤(来源:RogueBasin)


最终,你可以保存运行时内部生成的整个关卡以及玩家状态,然后跟踪所有更新。这是几个月前我首次构思此类游戏时的最初想法,但在此期间,我开始担心这种架构从长远来看会带来缩放问题。我现在想,如果将世界状态和游戏状态放在链下,但仍可以在layer 2以分布式方式进行验证是否更好。


未来的跨平行链或跨外部链交易仅仅是一个有趣的游戏上的一颗樱桃:“Gaming DeFi(游戏化的去中心化金融)”听起来确实有些疯狂,但是,嘿……有人可能希望通过期权交易来对冲由大量 pvp ganking 造成的铁矿石延迟交付!


最后,我希望这个例子能展示出创建游戏DappChain的可能性。



关于我

目前,我在Web3 基金会工作(主要负责Grant项目)。此博客是个人性质,碰巧我的爱好与工作保持一致。


该基金会的主要项目之一是Polkadot网络 —— 下一代区块链平台。



如有疑问/意见?

你可以在Medium上给我回复,或者在Twitter上与我联系:@EAThomson。


更多内容:


Parity 本杰明:Substrate 让区块链像互联网应用一样可升级可进化

用 Polkadot 时,我该选平行链还是平行线程?

如何开发一个安全去中心化的 Polkadot 域名系统


扫码关注公众号,回复 “1” 加入波卡群

关注 PolkaWorld

发现 Web 3.0 时代新机遇


点个 “好看” 再走吧!


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存